iT邦幫忙

2021 iThome 鐵人賽

DAY 9
1

我們現在已經知道 OpenCV 可以拿來處理影像,這樣的成效又適用在什麼領域? 或是能對生活有什麼幫助嗎?

像是近兩年新型冠狀病毒的疫情越演越烈,出入各個場所人人都必須戴著口罩,如果單靠人力控管,一定會有所疏失,我們這時就能配合 AI 的使用
辨識物件的系統,自動偵測到未戴口罩的民眾,並增加辨識上的精確度。

圖像辨識&物件偵測

我們之所以能夠辨別物體的不同,是因為我們可以透過學習該物體的特徵,例如貓&狗:

因此在圖形辨識很重要的步驟是必須建立特徵分類器
cv2.CascadeClassifier

記得要先下載 haarcascade 的模型 .xml 檔 !

faceClassi = cv2.CascadeClassifier(cascPath)

再來是偵測圖片 → 用detectMultiScale函數檢測,調整函數的參數使檢測結果更加精確!

faces = faceCascade.detectMultiScale( gray,  scaleFactor=1.12  ,  minNeighbors=5,  
minSize=(30, 30),  flags = cv2.cv.CV_HAAR_SCALE_IMAGE )
  • gray代表是灰階圖片
  • scaleFactor是圖像的縮放比例
  • minNeighbors針對目標進行檢測的次數
  • minSize檢測目標的最小尺寸

scaleFactor,minNeighbors,minSize數值大小將影響辨識結果,須依狀況進行調整

接下來將檢測到的人臉(或物體)框出來~!
以下使用 cv2.rectangle 函數畫方框。

  • 第一個參數是要動作的影像
  • 第二個參數是頂點座標
  • 第三個參數是對向頂點座標
  • 第四個參數是框框的顏色(Blue,Green,Red)
  • 第五個參數是線條的寬度
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

x, y, w, h 是圖像物件要被框出時很重要的座標
(x,y)是左上角的座標, w 是寬度, h 則是高度

最後再顯示圖片就大功告成了!

cv2.imshow('My Image', img)

cv2.waitKey(0)                      
cv2.destroyAllWindows()      

實際執行結果:


上一篇
[D08] OpenCV 影像旋轉
下一篇
[D10] 影像雜訊與濾波(1)
系列文
從林到有_Image processing30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言